package com.example.mysqlconnectiontest.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

/**
 * 测试控制器，提供HTTP接口测试数据库连接
 */
@RestController
public class TestController {

    @Autowired
    private DataSource dataSource;

    @Autowired
    private JdbcTemplate jdbcTemplate;

    /**
     * 测试数据库连接是否正常
     */
    @GetMapping("/test-connection")
    public String testConnection() {
        try (Connection connection = dataSource.getConnection()) {
            if (connection != null && !connection.isClosed()) {
                return "数据库连接成功！\n" +
                       "数据库产品名称: " + connection.getMetaData().getDatabaseProductName() + "\n" +
                       "数据库版本: " + connection.getMetaData().getDatabaseProductVersion();
            } else {
                return "数据库连接失败：获取的连接为空或已关闭";
            }
        } catch (SQLException e) {
            return "数据库连接失败: " + e.getMessage();
        }
    }

    /**
     * 列出数据库中的所有表
     */
    @GetMapping("/list-tables")
    public String listTables() {
        try {
            // 查询当前数据库中的所有表
            String sql = "SHOW TABLES";
            List<Map<String, Object>> tables = jdbcTemplate.queryForList(sql);
            
            if (tables.isEmpty()) {
                return "当前数据库中没有表";
            }
            
            StringBuilder result = new StringBuilder("当前数据库中的表：\n");
            for (Map<String, Object> table : tables) {
                table.values().forEach(value -> result.append("- ").append(value).append("\n"));
            }
            return result.toString();
        } catch (Exception e) {
            return "查询表失败: " + e.getMessage();
        }
    }
}
